package com.example.utils.excel;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExcelUtils{

    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String title, String []column, String [][]values, HSSFWorkbook wb){

        /** 第一步，创建一个HSSFWorkbook，对应一个Excel文件*/
        if(wb == null){
            wb = new HSSFWorkbook();
        }

        /** 第二步，在workbook中添加一个sheet,对应Excel文件中的sheet*/
        HSSFSheet sheet = wb.createSheet(sheetName);
        //列宽
        for (int i = 1; i < 7; i++) {//6-19列宽
            sheet.setColumnWidth(i, 256*12+184); //第一个参数代表列id(从0开始),第2个参数代表宽度值
        }
        /** 第三步，标题行及其格式*/
        HSSFRow titleRow = sheet.createRow(0);
        //创建单元格，并设置值表头 设置表头居中
        HSSFCellStyle titleStyle = wb.createCellStyle();
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        //合并单元格  指定 4 个参数，起始行，结束行，起始列，结束列。
        CellRangeAddress region = new CellRangeAddress(0, 0, 0, column.length-1);
        sheet.addMergedRegion(region);
        //声明列对象
        HSSFCell titleCell = titleRow.createCell(0);//创建单元格
                 titleCell.setCellValue(title);//设值
                 titleCell.setCellStyle(titleStyle);//设样式

        /** 第四步，列名行*/
        HSSFRow columnRow = sheet.createRow(1);
        //创建单元格， 设置列名居中
        HSSFCellStyle columnStyle = wb.createCellStyle();
        columnStyle.setAlignment(HorizontalAlignment.CENTER);

        //声明列对象
        HSSFCell columnCell = null;
        //创建标题
        for(int i=0;i<column.length;i++){
            columnCell = columnRow.createCell(i);
            columnCell.setCellValue(column[i]);
            columnCell.setCellStyle(columnStyle);
        }

        /** 第五步，创建内容*/
        //创建单元格，并设置值表头 设置列名居中
        //设置水平对齐的样式为居中对齐;

        HSSFCellStyle contentStyle = wb.createCellStyle();
        contentStyle.setAlignment(HorizontalAlignment.CENTER);
        contentStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
        //填充内容
        for(int i=0;i<values.length;i++){
            HSSFRow contentRow = sheet.createRow(i + 2);//第三行开始内容
            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象和样式
                contentRow.createCell(j).setCellStyle(contentStyle);
                contentRow.createCell(j).setCellValue(values[i][j]);
            }
        }
        return wb;
    }
}
